#!/bin/bash

# AIDE 数据库管理脚本
# 用于控制数据库的清除和重置操作

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}======================================"
echo -e "AIDE 数据库管理工具"
echo -e "======================================${NC}"
echo ""

# 检查 .env.prod 文件是否存在
if [ ! -f ".env.prod" ]; then
    echo -e "${RED}❌ 错误: .env.prod 文件不存在${NC}"
    echo -e "${YELLOW}请先复制 env-prod-template.txt 到 .env.prod 并配置相应的值${NC}"
    exit 1
fi

# 显示当前配置
echo -e "${BLUE}📋 当前配置:${NC}"
if grep -q "CLEAR_DATABASE_DATA=true" .env.prod; then
    echo -e "${RED}   数据清除: 启用 (⚠️ 危险)${NC}"
else
    echo -e "${GREEN}   数据清除: 禁用 (安全)${NC}"
fi
echo ""

# 主菜单
echo -e "${BLUE}请选择操作:${NC}"
echo "1) 🔄 正常重启服务 (保留数据)"
echo "2) 🗑️  清除数据并重启服务 (⚠️ 危险操作)"
echo "3) ⚙️  查看当前数据清除设置"
echo "4) 📝 修改数据清除设置"
echo "5) ❌ 退出"
echo ""

read -p "请输入选择 (1-5): " choice

case $choice in
    1)
        echo -e "${GREEN}🔄 正常重启服务 (保留现有数据)...${NC}"
        # 确保 CLEAR_DATABASE_DATA 设置为 false
        if grep -q "CLEAR_DATABASE_DATA=" .env.prod; then
            sed -i 's/CLEAR_DATABASE_DATA=.*/CLEAR_DATABASE_DATA=false/' .env.prod
        else
            echo "CLEAR_DATABASE_DATA=false" >> .env.prod
        fi
        
        echo -e "${BLUE}正在重新构建并启动服务...${NC}"
        docker-compose -f docker-compose.prod.yml -f docker-compose.$(if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then echo "windows"; else echo "linux"; fi).yml --env-file .env.prod up -d --build
        
        echo -e "${GREEN}✅ 服务已启动，数据已保留${NC}"
        ;;
        
    2)
        echo -e "${RED}⚠️  警告: 此操作将清除所有数据库数据！${NC}"
        echo -e "${YELLOW}包括: 任务、用户、重复任务、统计数据等所有内容${NC}"
        echo ""
        read -p "确定要继续吗？输入 'YES' 确认: " confirm
        
        if [ "$confirm" = "YES" ]; then
            echo -e "${RED}🗑️ 设置数据清除模式并重启服务...${NC}"
            
            # 设置 CLEAR_DATABASE_DATA 为 true
            if grep -q "CLEAR_DATABASE_DATA=" .env.prod; then
                sed -i 's/CLEAR_DATABASE_DATA=.*/CLEAR_DATABASE_DATA=true/' .env.prod
            else
                echo "CLEAR_DATABASE_DATA=true" >> .env.prod
            fi
            
            echo -e "${BLUE}正在重新构建并启动服务 (清除数据模式)...${NC}"
            docker-compose -f docker-compose.prod.yml -f docker-compose.$(if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then echo "windows"; else echo "linux"; fi).yml --env-file .env.prod up -d --build
            
            # 等待服务启动完成
            echo -e "${BLUE}等待服务启动完成...${NC}"
            sleep 10
            
            # 重置回 false，避免下次意外清除数据
            sed -i 's/CLEAR_DATABASE_DATA=.*/CLEAR_DATABASE_DATA=false/' .env.prod
            
            echo -e "${GREEN}✅ 数据已清除，服务已启动${NC}"
            echo -e "${YELLOW}💡 数据清除设置已自动重置为 false，防止意外清除${NC}"
        else
            echo -e "${BLUE}操作已取消${NC}"
        fi
        ;;
        
    3)
        echo -e "${BLUE}📊 当前数据清除设置:${NC}"
        if grep -q "CLEAR_DATABASE_DATA=true" .env.prod; then
            echo -e "${RED}   状态: 启用 (下次启动将清除数据)${NC}"
            echo -e "${YELLOW}   ⚠️ 建议设置为 false 以防意外数据丢失${NC}"
        elif grep -q "CLEAR_DATABASE_DATA=false" .env.prod; then
            echo -e "${GREEN}   状态: 禁用 (数据安全)${NC}"
        else
            echo -e "${YELLOW}   状态: 未设置 (默认禁用)${NC}"
        fi
        ;;
        
    4)
        echo -e "${BLUE}📝 修改数据清除设置${NC}"
        echo "1) 禁用数据清除 (推荐)"
        echo "2) 启用数据清除 (⚠️ 危险)"
        echo ""
        read -p "请选择 (1-2): " setting_choice
        
        case $setting_choice in
            1)
                if grep -q "CLEAR_DATABASE_DATA=" .env.prod; then
                    sed -i 's/CLEAR_DATABASE_DATA=.*/CLEAR_DATABASE_DATA=false/' .env.prod
                else
                    echo "CLEAR_DATABASE_DATA=false" >> .env.prod
                fi
                echo -e "${GREEN}✅ 数据清除已禁用${NC}"
                ;;
            2)
                echo -e "${RED}⚠️ 警告: 启用此设置后，下次服务启动时将清除所有数据！${NC}"
                read -p "确定要启用吗？输入 'YES' 确认: " confirm
                if [ "$confirm" = "YES" ]; then
                    if grep -q "CLEAR_DATABASE_DATA=" .env.prod; then
                        sed -i 's/CLEAR_DATABASE_DATA=.*/CLEAR_DATABASE_DATA=true/' .env.prod
                    else
                        echo "CLEAR_DATABASE_DATA=true" >> .env.prod
                    fi
                    echo -e "${RED}⚠️ 数据清除已启用！下次启动服务时将清除所有数据${NC}"
                else
                    echo -e "${BLUE}操作已取消${NC}"
                fi
                ;;
            *)
                echo -e "${RED}无效选择${NC}"
                ;;
        esac
        ;;
        
    5)
        echo -e "${BLUE}退出${NC}"
        exit 0
        ;;
        
    *)
        echo -e "${RED}无效选择，请输入 1-5${NC}"
        exit 1
        ;;
esac

echo ""
echo -e "${BLUE}======================================"
echo -e "操作完成"
echo -e "======================================${NC}"
